
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>03_数组扩展</title>
</head>
<body>
<button>测试1</button>
<br>
<button>测试2</button>
<br>
<button>测试3</button>
<br>

<!--
	1. Array.from(v) : 将伪数组对象或可遍历对象转换为真数组
	2. Array.of(v1, v2, v3) : 将一系列值转换成数组
	
	3. Array.prototype.find(function(value, index, arr){return true}) : 找出第一个满足条件返回true的元素
	4. Array.prototype.findIndex(function(value, index, arr){return true}) : 找出第一个满足条件返回true的元素下标
	13.Array.prototype.includes(searchElement, fromIndex):判断元素是否在数组中
    searchElement：必须，需要查找的元素值。
    fromIndex：可选，从fromIndex 索引处开始查找目标值。如果为负值，则按升序从 array.length + fromIndex 的索引开始搜 （即使从末尾开始往前跳 fromIndex 的绝对值个索引，然后往后搜寻）。默认为 0。
	
	5. Array.prototype.some(function(value, index, arr)){return true}):只要有一个条件符合就返回true
	6. Array.prototype.every(function(value, index, arr)){return true}):只要有一个条件不符合就返回false
	
	
	9. Array.prototype.forEach(function(item, index){}) : 遍历数组
	10.Array.prototype.map(function(item, index){}) : 遍历数组返回一个新的数组，返回加工之后的值
	11.Array.prototype.filter(function(item, index){}) : 遍历过滤出一个新的子数组， 返回条件为true的值
	12.Array.prototype.reduce(function(prve,value){})
	17.Array.prototype.flat()默认只会“拉平”一层，如果想要“拉平”多层的嵌套数组，可以将flat()方法的参数写成一个整数，表示想要拉平的层数，默认为1。
	
	
	14.Array.prototype.entries()
	15.Array.prototype.keys()
	16.Array.prototype.values()
  
  Array.prototype.fill(value, start, end)
  value：必需。填充的值；
  start：可选。开始填充位置；
  end：可选。停止填充位置 (默认为 array.length)。
  如果不提供结束索引，则一直填充到数组末尾。如果是负值，则将从负值加上数组的长度而得到的值开始。

-->
<script type="text/javascript">
   // 1. Array.from(v) : 将伪数组对象或可遍历对象转换为真数组
   let btns = document.getElementsByTagName('button');
   let arrayLike = {
       '0': 'a',
       '1': 'b',
       '2': 'c',
       length: 3
   };
   // es5
   // console.log([].slice.call(arrayLike));//(3) ["a", "b", "c"]
   var toArray=function(s){
   	try{
   		return Array.prototype.slice.call(s)
   	}catch(e){
   		var arr=[];
   		for(var i=0,len=s.length;i<len;i++){
   			arr[i]=s[i];//据说这样比push快
   		}
   		return arr;
   	}
   }
   console.log(toArray(arrayLike));//(3) ["a", "b", "c"]
   
   // es6
   console.log(Array.from(arrayLike));//(3) ["a", "b", "c"]
   
	
   // 2.Array.of(v1, v2, v3) : 将一系列值转换成数组
   let number = Array.of(1, 'abc', true);
   console.log(number);// [1, "abc", true]
   
   
   
   // keys()/values()/entries()
   const arr=[1,2,3,4]
   for(let x of arr.keys()){
   	console.log(x)
   }
   
   for (let x of arr.values()){
   	console.log(x)
   }
   
   // entries()遍历获取的是键值对，需要解构
   for(let [x,y] of arr.entries()){
   	console.log(x,y)
   }
   
   // 如果不使用for...of循环，可以手动调用遍历器对象的next方法，进行遍历。
   let enteries=arr.entries()
   console.log(enteries.next().value)
   console.log(enteries.next().value)
   console.log(enteries.next().value)
   
  
</script>
</body>

</html>